/**
 * @file camera_capture_thread.h
 * @brief 摄像头采集线程
 * @version 1.0
 * @date 2025-04-29
 */

#ifndef CAMERA_CAPTURE_THREAD_H
#define CAMERA_CAPTURE_THREAD_H

#include <pthread.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

// 摄像头采集线程状态
typedef enum {
    CAPTURE_THREAD_IDLE = 0,     // 空闲状态
    CAPTURE_THREAD_RUNNING,      // 运行中
    CAPTURE_THREAD_STOPPING,     // 正在停止
    CAPTURE_THREAD_STOPPED,      // 已停止
    CAPTURE_THREAD_ERROR         // 错误状态
} CaptureThreadState;

// 全局变量声明
extern pthread_t g_capture_thread;
extern volatile CaptureThreadState g_capture_thread_state;
extern volatile bool g_capture_thread_exit;

/**
 * @brief 启动摄像头采集线程
 * 该线程会初始化摄像头、采集指定次数的图像，并在完成后清理资源
 * 
 * @param capture_count 采集次数，-1表示无限采集
 * @return int 成功返回0，失败返回非0
 */
int start_camera_capture_thread(int capture_count);

/**
 * @brief 停止摄像头采集线程
 * 
 * @return int 成功返回0，失败返回非0
 */
int stop_camera_capture_thread(void);

/**
 * @brief 获取摄像头采集线程状态
 * 
 * @return CaptureThreadState 线程状态
 */
CaptureThreadState get_camera_capture_thread_state(void);

/**
 * @brief 等待摄像头采集线程结束
 * 
 * @param timeout_ms 超时时间(毫秒)，-1表示无限等待
 * @return int 成功返回0，超时返回1，失败返回-1
 */
int wait_camera_capture_thread(int timeout_ms);

#ifdef __cplusplus
}
#endif

#endif /* CAMERA_CAPTURE_THREAD_H */ 